﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using GandAInvitaciones.Common.Objects;
using System.Web.Services;
using System.Collections;
using System.Data;

namespace Invitaciones.Base
{
    public class PageBase : System.Web.UI.Page
    {
        private List<Parametro> SessionParametros
        {
            get
            {
                if (Session["Parametros"] == null)
                {
                    return new List<Parametro>();
                }
                return (List<Parametro>)Session["Parametros"];
            }
            set { Session["Parametros"] = value; }
        }

        public List<Parametro> ViewParametros
        {
            get
            {
                if (ViewState["Parametros"] == null)
                {
                    return new List<Parametro>();
                }
                return (List<Parametro>)ViewState["Parametros"];
            }
            set { ViewState["Parametros"] = value; }
        }

        public string SessionUrlOriginal
        {
            get
            {
                if (Session["UrlOriginal"] != null)
                    return Session["UrlOriginal"].ToString();
                else
                    return "";
            }
            set { Session["UrlOriginal"] = value; }
        }

        protected override void OnLoad(EventArgs e)
        {
            // Verifico si la session esta activa
            //if (SessionUsuario.IdSession == null && (Page.ToString() != "ASP.account_login_aspx" && Page.ToString() != "ASP.pagecommon_error_aspx"))
            //{
            //    if (Page.Master.ToString() != "ASP.popup_master")
            //    {
            //        Response.Redirect(ResolveUrl("~/Account/Login.aspx"), true);
            //    }
            //}

            if (this.SessionParametros.Count == 0)
            {
                this.SessionUrlOriginal = this.Page.Request.Url.OriginalString;
            }

            setParametros();
            base.OnLoad(e);
        }

        protected override void OnLoadComplete(EventArgs e)
        {
            //if (SessionUsuario.IdSession == null && Page.ToString() != "ASP.account_login_aspx")
            //{
            //    if (Page.Master.ToString() == "ASP.popup_master")
            //    {
            //        EjecutaJavaScript("ClosePopUpCurrent();", Page.IsPostBack == true ? false : true);
            //    }
            //}

            base.OnLoadComplete(e);
        }

        protected override void OnPreInit(EventArgs e)
        {
            //if (Page.ToString() != "ASP.account_login_aspx")
            //{
            //    Page.Theme = string.IsNullOrEmpty(SessionLaboratorio.Tema) ? "Default" : SessionLaboratorio.Tema;
                base.OnPreInit(e);
            //}
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            ////Verifico seguridad
            //if (Page.ToString() != "ASP.account_login_aspx" && Page.ToString() != "ASP.default_aspx" && Page.ToString() != "ASP.pagecommon_permiso_aspx" && Page.ToString() != "ASP.pagecommon_error_aspx")
            //{
            //    GandA.Component.Security.PermisoItem pi = new GandA.Component.Security.PermisoItem();
            //    GandA.Component.Security.Permisos p = new GandA.Component.Security.Permisos("BD");
            //    pi = p.ObtenPermisoItem(IdItem, SessionUsuario.Perfil);
            //    if (pi.PermisoAcceso == 0)
            //    {
            //        Response.Redirect("~/PageCommon/Permiso.aspx", true);
            //    }
            //}
        }

        private void setParametros()
        {
            if (this.SessionParametros.Count == 0)
            {
                Parametro oParam;
                this.SessionParametros = new List<Parametro>();
                for (int i = 0; i < Request.QueryString.Count; i++)
                {
                    oParam = new Parametro();

                    oParam.Acceso = 1;
                    oParam.Nombre = Request.QueryString.GetKey(i);
                    oParam.Valor = HttpUtility.UrlDecode(Request.QueryString[oParam.Nombre]);

                    this.SessionParametros.Add(oParam);
                }

                if (Request.QueryString.Count > 0)
                {
                    Response.Redirect(this.Page.Request.AppRelativeCurrentExecutionFilePath);
                }
            }
            else
            {
                ViewParametros = SessionParametros;
                SessionParametros = new List<Parametro>();
            }
        }

        public void EjecutaJavaScript(string script, bool esEnLoad)
        {
            if (!esEnLoad)
            {
                ////RegisterOnSubmitStatement("javascrip","<script type='text/javascript'>" + script + "</script>");
                ClientScript.RegisterClientScriptBlock(typeof(PageBase), "javascript", script, true);
            }
            else
            {
                ClientScript.RegisterStartupScript(typeof(PageBase), "javascript", script, true);
            }
        }

        public static ConsultaServiceReference.Parameter CreaParametroConsulta(string _nombreParametro, object _valor, ConsultaServiceReference.Parameter.vEnumType _type)
        {
            ConsultaServiceReference.Parameter p = new ConsultaServiceReference.Parameter();
            p.nombreParametro = _nombreParametro;
            p.valor = _valor;
            p.type = _type;

            return p;
        }

        //public int IdItem
        //{
        //    get
        //    {
        //        if (ViewState["IdItem"] == null)
        //        {
        //            return 0;
        //        }
        //        return (int)ViewState["IdItem"];
        //    }
        //    set { ViewState["IdItem"] = value; }
        //}

        #region WebMethod Common
        [WebMethod]
        public static bool ValidaUsuario(int idInvitacion, string u, string p)
        {
            ConsultaServiceReference.ConsultaServiceClient srv = new ConsultaServiceReference.ConsultaServiceClient();
            ArrayList parametros = new ArrayList();
            //Parametros
            parametros.Add(CreaParametroConsulta("@pnIdInvitacion", idInvitacion, ConsultaServiceReference.Parameter.vEnumType.Int));
            parametros.Add(CreaParametroConsulta("@psUsuario", u, ConsultaServiceReference.Parameter.vEnumType.NVarChar));
            parametros.Add(CreaParametroConsulta("@psContrasena", p, ConsultaServiceReference.Parameter.vEnumType.NVarChar));
            ConsultaServiceReference.Parameter[] prms = new ConsultaServiceReference.Parameter[parametros.Count];
            parametros.CopyTo(prms);
            //Ejecuta conulta
            DataSet ds = srv.EjecutaConsultaConParametros("Inv.spValidaUsuarioInvitacion", prms);
            if (ds.Tables[0].Rows.Count > 0)
            {
                if (ds.Tables[0].Rows[0]["EsValido"].ToString().Equals("1"))
                {
                    HttpContext.Current.Session["Usuario"] = u;
                    return true;
                }

                return false;
            }
            else
            {
                HttpContext.Current.Session.Remove("Usuario");
            }

            return false;
        }

        [WebMethod]
        public static void InsertaConfirmacion(int idInvitacion, string nombre, int? numAdultos, int? numNinos, string comentarios)
        {
            InvitacionServiceReference.InvitacionServiceClient srv = new InvitacionServiceReference.InvitacionServiceClient();
            InvitacionServiceReference.Confirmacion obj = new InvitacionServiceReference.Confirmacion();
            obj.IdInvitacion = idInvitacion;
            obj.Nombre = nombre;
            obj.NumAdultos = numAdultos;
            obj.NumNinos = numNinos;
            obj.Comentarios = comentarios;
            srv.GuardaInvitado(obj);
        }

        [WebMethod]
        public static string ValidaBarra()
        {
            return HttpContext.Current.Session["Usuario"] == null ? "" : HttpContext.Current.Session["Usuario"].ToString();
        }

        [WebMethod]
        public static void Logout()
        {
            HttpContext.Current.Session["Usuario"] = null;
        }
        #endregion
    }
}